#include <stdio.h>
#include <string.h>

// 执行命令：gcc -o Rotate3 Rotate3.c && ./Rotate3

// 函数功能：将字符串s从from到to的区域反转
void RotateString(char *s, int from, int to){
	char t;
	while(from < to){
		t = s[from];
		s[from++] = s[to];
		s[to--] = t;
	}
}

// 函数功能：将字符串s按单词进行反转，比如"I am a student."，反转后得到"student. a am I"
// 算法说明：
//	以i, j两个变量遍历一遍字符串，其中i为遍历下标，j记录单词的开始位置(非空白字符)
//	获取到一个单词后，调用RotateString函数，对该单词进行反转，
//	全部单词操作完成后，再对整个字符串进行整体反转。
void ReverseWord(char *s){	
	int len = strlen(s);
	int i = -1, j = -1;
	for(i = 0; i < len; i++){	
		// s[i]不是空格字符
		if(s[i] != ' ' && s[i] != '\t'){
			if(j == -1){
				j = i;
			}else if(i == (len - 1)){
				// 对遍历已到达字符串尾部进行特殊处理
				RotateString(s, j, len - 1);
			}else{
			}
		}else{
			// s[i]是空白字符
			if(j != -1){
				// 找到一个单词，对该单词进行单个反转
				RotateString(s, j, i-1);
				j = -1;
			}
		}
	}
	// 对整个字符串进行整体反转，得到最终结果
	RotateString(s, 0, len-1);
}

int main(){
	char s[] = "I  am  	a 	student.  	";
	printf("Before: \"%s\"\n", s);	
	ReverseWord(s);
	printf("After: \"%s\"\n", s);
}
